using System.Drawing;

namespace Diversity.Robotics.Navigation
{
    /// <summary>
    /// A way of updating a map
    /// </summary>
    public interface IConeModel
    {
        /// <summary>
        /// DEPRECIATED
        /// </summary>
        /// <param name="map"></param>
        /// <param name="state"></param>
        /// <param name="reading"></param>
        /// <param name="cmPerPixel"></param>
        /// <param name="updateRect"></param>
        /// <returns></returns>
        double[,] UpdateMap(double[,] map, Pose2D state, double[] reading, double cmPerPixel,
                            out Rectangle updateRect);

        /// <summary>
        /// Updates the map using the cone model specified by the reading.
        /// </summary>
        /// <param name="map"></param>
        /// <param name="reading"></param>
        /// <param name="cmPerPixel"></param>
        /// <returns></returns>
        double[,] UpdateMap(double[,] map, DistanceReading reading, double cmPerPixel);

        /// <summary>
        /// Updates the map using the cone model specified by the reading. 
        /// </summary>
        /// <param name="map"></param>
        /// <param name="reading"></param>
        /// <param name="cmPerPixel"></param>
        void UpdateMap(ref double[,] map, DistanceReading reading, double cmPerPixel);

        /// <summary>
        /// The width of the cone expressed in radians
        /// </summary>
        double ConeWidth
        { 
            get;
        }

        /// <summary>
        /// This is used to fill the space behind a hit
        /// </summary>
        double ObstacleSize
        {
            get;
        }
        

    }
}
